// import parseTime, formatTime and set to filter
export { parseTime, formatTime } from '@/utils'

/**
 * Show plural label if time is plural number
 * @param {number} time
 * @param {string} label
 * @return {string}
 */
function pluralize(time, label) {
  if (time === 1) {
    return time + label
  }
  return time + label + 's'
}

/**
 * @param {number} time
 */
export function timeAgo(time) {
  const between = Date.now() / 1000 - Number(time)
  if (between < 3600) {
    return pluralize(~~(between / 60), ' minute')
  } else if (between < 86400) {
    return pluralize(~~(between / 3600), ' hour')
  } else {
    return pluralize(~~(between / 86400), ' day')
  }
}

/**
 * Number formatting
 * like 10000 => 10k
 * @param {number} num
 * @param {number} digits
 */
export function numberFormatter(num, digits) {
  const si = [
    { value: 1E18, symbol: 'E' },
    { value: 1E15, symbol: 'P' },
    { value: 1E12, symbol: 'T' },
    { value: 1E9, symbol: 'G' },
    { value: 1E6, symbol: 'M' },
    { value: 1E3, symbol: 'k' }
  ]
  for (let i = 0; i < si.length; i++) {
    if (num >= si[i].value) {
      return (num / si[i].value).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol
    }
  }
  return num.toString()
}

/**
 * 10000 => "10,000"
 * @param {number} num
 */
export function toThousandFilter(num) {
  return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
}

/**
 * Upper case first char
 * @param {String} string
 */
export function uppercaseFirst(string) {
  return string.charAt(0).toUpperCase() + string.slice(1)
}


//人民币大小写金额转换
function changeNumMoneyToChinese(money){
  　　var cnNums = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); //汉字的数字
  　　var cnIntRadice = new Array("", "拾", "佰", "仟"); //基本单位
  　　var cnIntUnits = new Array("", "万", "亿", "兆"); //对应整数部分扩展单位
  　　var cnDecUnits = new Array("角", "分", "毫", "厘"); //对应小数部分单位
  　　var cnInteger = "整"; //整数金额时后面跟的字符
  　　var cnIntLast = "元"; //整型完以后的单位
  　　var maxNum = 999999999999999.9999; //最大处理的数字
  　　var IntegerNum; //金额整数部分
  　　var DecimalNum; //金额小数部分
  　　var ChineseStr = ""; //输出的中文金额字符串
  　　var parts; //分离金额后用的数组，预定义
  　　if(money == ""){return "";}
      money = parseFloat(money);
  　　if (money >= maxNum) {
      　　alert('总计算额超出最大处理数字');
      　　return "";
  　　}
  　　if (money == 0) {
      　　ChineseStr = cnNums[0] + cnIntLast + cnInteger;
      　　return ChineseStr;
  　　}
  　　    money = money.toString(); //转换为字符串
  　　if (money.indexOf(".") == -1) {
      　　IntegerNum = money;
      　　DecimalNum = '';
  　　}else {
      　　parts = money.split(".");
      　　IntegerNum = parts[0];
      　　DecimalNum = parts[1].substr(0, 4);
  　　    }
  　　if (parseInt(IntegerNum, 10) > 0) { //获取整型部分转换
      　　var zeroCount = 0;
      　　var IntLen = IntegerNum.length;
      　　for (var i = 0; i < IntLen; i++) {
          　　var n = IntegerNum.substr(i, 1);
          　　var p = IntLen - i - 1;
          　　var q = p / 4;
          　　var m = p % 4;
          　　if (n == "0") {
              　　   zeroCount++;
          　　} else {
              　　if (zeroCount > 0) {
                  　　    ChineseStr += cnNums[0];
              　　}
              　　zeroCount = 0; //归零
              　　ChineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
          　　}
          　　if (m == 0 && zeroCount < 4) {
              　　ChineseStr += cnIntUnits[q];
          　　}
      　　}
      　　   ChineseStr += cnIntLast;
      　　//整型部分处理完毕
  　　}
  　　if (DecimalNum != '') { //小数部分
      var decLen = DecimalNum.length;
      　　for (var i = 0; i < decLen; i++) {
          　　var n = DecimalNum.substr(i, 1);
          　　if (n != '0') {
              　　ChineseStr += cnNums[Number(n)] + cnDecUnits[i];
          　　}
      　　}
  　　}
  　　if (ChineseStr == '') {
      　　ChineseStr += cnNums[0] + cnIntLast + cnInteger;
  　　} else if (DecimalNum == '') {
      　　ChineseStr += cnInteger;
  　　}
  　　return ChineseStr;
  }
  
  //将浮点数四舍五入，取小数点后2位，如果不足2位则补0,这个函数返回的是字符串的格式
  function changeTwoDecimal_f(x) {
      var f_x = parseFloat(x);
      if (isNaN(f_x)) {
          //alert('function:changeTwoDecimal->parameter error');
          return false;
      }
      var f_x = Math.round(x * 100) / 100;
      var s_x = f_x.toString();
      var pos_decimal = s_x.indexOf('.');
      if (pos_decimal < 0) {
          pos_decimal = s_x.length;
          s_x += '.';
      }
      while (s_x.length <= pos_decimal + 2) {
          s_x += '0';
      }
      return s_x;
  }
  
  //计算每一列的总结果
  function sumColumn(ind){
      var out = 0;
      for(var i=0;i<myGrid.getRowsNum();i++){
          out += parseFloat(myGrid.cells2(i,ind).getValue());
          //out += parseFloat(myGrid.cells2(i,ind).getValue());
          //console.log(myGrid.cells2(i,ind).getValue());
      }
      return out;
  }
  
  /**********************时间系列****************************/
  
  //获取当前系统时间,某年某月某日的形式
  function getCurrentTime(){
      var d = new Date();
      var str = d.getFullYear()+"年"+(d.getMonth()+1)+"月"+d.getDate()+"日";
      return str;
      //alert(str);
  }
  
  //获取某个月的天数
  function getDaysInOneMonth(year, month){  
    month = parseInt(month, 10);//parseInt() 函数可解析一个字符串，并返回一个整数。
    var d= new Date(year, month, 0);  
    return d.getDate();  
  }
  
  //获取年月的最后一天的日期,也就是这个月的天数
  function getLastDay(year,month){
       var new_year = year;  //取当前的年份   
       var new_month = month++;//取下一个月的第一天，方便计算（最后一天不固定）   
       if(month>12)      //如果当前大于12月，则年份转到下一年   
       {   
       new_month -=12;    //月份减   
       new_year++;      //年份增   
       }   
       var new_date = new Date(new_year,new_month,1);        //取当年当月中的第一天   
       return (new Date(new_date.getTime()-1000*60*60*24)).getDate();//获取当月最后一天日期   
  } 
  
  //判断日期是否合法 
  function IsDate(dateValue){ 
      var regex = new RegExp("^(?:(?:([0-9]{4}(-|\/)(?:(?:0?[1,3-9]|1[0-2])(-|\/)(?:29|30)|((?:0?[13578]|1[02])(-|\/)31)))|([0-9]{4}(-|\/)(?:0?[1-9]|1[0-2])(-|\/)(?:0?[1-9]|1\\d|2[0-8]))|(((?:(\\d\\d(?:0[48]|[2468][048]|[13579][26]))|(?:0[48]00|[2468][048]00|[13579][26]00))(-|\/)0?2(-|\/)29))))$"); 
      if (regex.test(dateValue)) {  
          return true; 
      }else{
          return false;
      } 
  } 
  
  //计算两个日期天数差的函数，通用
  function DateDiff(end_time,start_time) {//sDate1和sDate2是yyyy-MM-dd格式
      var aDate, oDate1, oDate2, iDays;
      aDate = end_time.split("-");
      oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]);  //转换为yyyy-MM-dd格式
      aDate = start_time.split("-");
      oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]);
      iDays = parseInt((oDate1 - oDate2) / 1000 / 60 / 60 / 24); //把相差的毫秒数转换为天数
      return iDays;  //返回相差天数
  }
  
  //获取时间的月数,time形式:2015-06-05 08:52:56'
  function get_time_month(time){
      result1 = split('-',time);
      result = result1[1];
      return result
  }
  
  //获取时间的天数,time形式:2015-06-05 08:52:56'
  function get_time_day(time){
      result1 = split('-',time);
      result = result1[2];
      return result
  }
  
  //时间相差,
  function get_time_hour_distance(start_time,end_time){
      var date_distance=end_time.getTime()-start_time.getTime();  //时间差的毫秒数
      var days=Math.floor(date3/(24*3600*1000));//计算出相差天数
       
      //计算出小时数
      var leave1=date3%(24*3600*1000);   //计算天数后剩余的毫秒数
      var hours=Math.floor(leave1/(3600*1000));
      return hours;
  }
  
  //毫秒转化成小时
  function MillisecondToDate(msd){
      var time = parseFloat(msd) / 1000;
      if (null != time && "" != time){
          if (time > 60 && time < 60 * 60){
              time = parseInt(time / 60.0) + "分钟" + parseInt((parseFloat(time / 60.0) -
                  parseInt(time / 60.0)) * 60) + "秒";
          }
          else if (time >= 60 * 60 && time < 60 * 60 * 24){
              time = parseInt(time / 3600.0) + "小时" + parseInt((parseFloat(time / 3600.0) -
                  parseInt(time / 3600.0)) * 60) + "分钟" +
                  parseInt((parseFloat((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) -
                  parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60) + "秒";
          }
          else{
              time = parseInt(time) + "秒";
          }
      }
      return time;
  }
  
  //获取某个时间的时间戳，
  function timestamp(time){
      var timestamp = Date.parse(time);
      return timestamp;
  }
  
  //获取某个日期的时间戳,注意是日期不是时间,时间格式：2015-06-16
  function getTime(day){
      re = /(\d{4})(?:-(\d{1,2})(?:-(\d{1,2}))?)?(?:\s+(\d{1,2}):(\d{1,2}):(\d{1,2}))?/.exec(day); 
      return new Date(re[1],(re[2]||1)-1,re[3]||1,re[4]||0,re[5]||0,re[6]||0).getTime();
  }
  
  //获取当前时间，指定格式
  // 对Date的扩展，将 Date 转化为指定格式的String   
  // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，   
  // 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)   
  // 例子：   
  // var date = new Date().Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423   
  // var date = new Date().Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
  
  function format(format){
       var o = { 
          "M+" : this.getMonth()+1, //month 
          "d+" : this.getDate(), //day 
          "h+" : this.getHours(), //hour 
          "m+" : this.getMinutes(), //minute 
          "s+" : this.getSeconds(), //second 
          "q+" : Math.floor((this.getMonth()+3)/3), //quarter 
          "S" : this.getMilliseconds() //millisecond 
          }
  
          if(/(y+)/.test(format)) { 
              format = format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); 
          }
  
          for(var k in o) { 
              if(new RegExp("("+ k +")").test(format)) { 
                  format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length)); 
              } 
          } 
          return format; 
  }
  
  //计算时间整月月数差，注意：不包括开始结束时间两头的天数，只算整月，时间格式：2015-07-14
  //比如，2015-07-14与2015-03-12之间的整月数差为3，公式：7-3-1=3个月
  //比如，2015-07-14与2013-03-12之间的整月数差为3，公式：(2015-2013-1)*12+(12-3+7-1)=12+15=17个月，不考虑14与12这两个天数
  function int_monthDiff(end_time,start_time){
      //判断是否为同一年
      var feemonth;
      var start_time_temp = start_time.split('-');
      var end_time_temp = end_time.split('-');
  
      if(start_time_temp[0]==end_time_temp[0]){
          feemonth = Number(end_time_temp[1])-Number(start_time_temp[1])-1;
      }else if(end_time_temp[0]>start_time_temp[0]){
          feemonth = (Number(end_time_temp[0])-Number(start_time_temp[0])-1)*12+(12-Number(start_time_temp[1])+Number(end_time_temp[1])-1);
      }
  
      return feemonth;
  }
  
  /************************************************************/
  
  /**************************************去掉空格系列************/
  //去掉字符串里面的空格
  function allspace(text){
      text  =  text.replace(/\s/ig,'');
      return text;
  }
  
  //去掉前后空格：
  //第一种方法：
  //使用trim()
  function  Trim(m){
      while((m.length>0)&&(m.charAt(0)==' '))   
      m   =   m.substring(1, m.length);   
      while((m.length>0)&&(m.charAt(m.length-1)==' '))   
      m = m.substring(0, m.length-1);   
      return m;   
  } 
  
  //第二种方法
  function trim2(text){
      text = text.replace(/(^\s*)|(\s*$)/g,'');
      return text;
  }
  
  //------------- 
  //去掉字串左边的空格 
  function lTrim(str){
      if (str.charAt(0) == " ") 
      { 
      //如果字串左边第一个字符为空格 
      str = str.slice(1);//将空格从字串中去掉 
      //这一句也可改成 str = str.substring(1, str.length); 
      str = lTrim(str); //递归调用 
      } 
      return str; 
  } 
  
  //去掉字串右边的空格 
  function rTrim(str){
      var iLength;
      iLength = str.length; 
      if (str.charAt(iLength - 1) == " ") { 
          //如果字串右边第一个字符为空格 
          str = str.slice(0, iLength - 1);//将空格从字串中去掉 
          //这一句也可改成 str = str.substring(0, iLength - 1); 
          str = rTrim(str); //递归调用 
      } 
      return str; 
  }
  
  //去掉字串两边的空格 
  function trim(str){
      return lTrim(rTrim(str)); 
  }
  
  /**************DHX message***************************/
  
  //通用DHX message1，融云通知用
  function dhx_meassage(content,time,position){
      
    dhtmlx.message.position = 'bottom';	
    if(position!=''){
      dhtmlx.message.position = position;	
    }
      dhtmlx.message({
      type:'error',
          text: "<p>您有新的消息:</p>"+content,
          expire: time
      })
  }
  
  //通用message2，一般情况用
  //content:里面可以填html标签，比如,"我还可以做成链接<br/><a href='http://www.zhihu.com'>知乎</a>"
  //time：-1 message常在，3000 message 3秒之后消失
  //position:top bottom
  function normal_meassage(content,time,position){
      
      dhtmlx.message.position = 'top'; 
      if(position!=''){
          dhtmlx.message.position = position; 
      }
      dhtmlx.message({
          text: content,
          expire: time
      })
  }
  
  //错误message
  function error_true_message(content){
      dhtmlx.message({
          type: "error",
          text: content,
          expire: 3000
      })
  }
  
  //自定义样式的message
  //需要引用样式文件:
  //http://www.emcqupt.com/source/css/css_thl.css
  function custom_message(content){
      dhtmlx.message.position="top";
      dhtmlx.message({
          type:'mycss',
          text: content,
          expire: 3000
      })
  }
  
  
  /****************DHX 警告********************************/
  function warning(content){
      dhtmlx.alert({
          type:"alert-warning",
          text:content,
          ok:"确定",
          callback:function(result){
      
          }
      });
  }
  
  function error_message(title,content){
      dhtmlx.alert({
          title:title,
          type:"alert-error",
          ok:"确定",
          text:content,
          callback:function(result){
              //console.info('你觉得:'+result);
          }
      });
  }
  
  /****************DHX 警告********************************/
  
  /****************DHX POPUP 小提示********************************/
  
  function showPopup(inp,content) {
          if (!myPop) {
              myPop = new dhtmlXPopup();
              myPop.attachHTML(content);
          }
          if (myPop.isVisible()) {
              myPop.hide();
          } else {
              var x = window.dhx4.absLeft(inp);
              var y = window.dhx4.absTop(inp);
              var w = inp.offsetWidth;
              var h = inp.offsetHeight;
              myPop.show(x,y,w,h);
          }
      }
      
      function hidePopup() {
          if (myPop){
              myPop.hide()
          };
      }
  /****************DHX POPUP 小提示********************************/
  
  /****************jquery easyUI  小提示********************************/
  function showTips(Obj,content){
          Obj.tooltip({
              position: 'right',
              content: '&nbsp;&nbsp;'+content+'&nbsp;&nbsp;',
              showEvent: null ,
              hideEvent: null , 
              onShow: function(){
                  Obj.tooltip('tip').css({
                      backgroundColor: 'white',
                      borderColor: 'red'
                  });
              }
          }); 
          Obj.tooltip("show");   
      }
      function hideTips(Obj){
          Obj.tooltip("hide");    
      }
  
  
  /****************jquery easyUI  小提示********************************/
  
  
  
  
  
  
  